//====================================
// Parsing tag < ${name} >
// ====================================
HRESULT ${className}::Write${name}( CATIDOMElement * ipElement, ${baseName}${name} *& ip${name})  
{
	HRESULT hr = E_FAIL ; 

<#list Attributes as attr>
<#if attr.list != "y" >
	CATUnicodeString  str${attr.name} ; 
	ip${name}->Get${attr.name}( str${attr.name} ) ; 
	<#if attr.nodeType == "attr" >
	hr = ipElement->SetAttribute( "${attr.tag}", str${attr.name}) ; 
	<#elseif attr.nodeType ==  "text">
	hr = CreateElement( ipElement, "${attr.tag}", str${attr.name}) ; 
	<#else>
    CATIDOMElement_var spDOM${attr.name} ;
    hr = _spDOMDoc->CreateElement( "${attr.tag}", spDOM${attr.name}) ;
    if( FAILED(hr) )
    {
        return hr;
    }
	
	hr = ipElement->AppendChild(spDOM${attr.name}) ;
	
	${baseName}${attr.type} * p${attr.name} = NULL ;
	ip${name}->Get${attr.name}( p${attr.name} ) ; 
	hr = Write${attr.name}(spDOM${attr.name}, p${attr.name}) ;
	</#if>
	if( FAILED(hr) ) 
	{ 
		return hr;                
	}
<#else>
  <#switch attr.type>
	<#case "int">
	<#case "double">
	<#case "long">
	<#case "CATUnicodeString">
	
	CATListOf${attr.type} list${attr.name} ;
	ip${name}->Get${attr.name}( list${attr.name} ) ; 
	
     int nSize${attr.name} = list${attr.name}Size();
	 for( int i =0 ; i++)
	 {
		CATUnicodeString  str${attr.name} ;
		str${attr.name}.BuildFrom(list${attr.name}[i] ) ;
		
		hr = CreateElement( ipElement, "${attr.tag}", str${attr.name}) ; 
		if( FAILED(hr) ) 
		{ 
			continue;                
		}
	 }
	<#break>
	<#default>
	
	${baseName}${attr.type}List * pList${attr.name} = NULL ;
	ip${name}->Get${attr.name}( pList${attr.name} ) ; 
		
     int nSize${attr.name} = pList${attr.name}->Size();
	 for( int i =0 ; i++)
	 {
		CATIDOMElement_var spElement ;
		hr = _spDOMDoc->CreateElement( "${attr.tag}", spElement) ;
		
		hr = ipElement->AppendChild(spElement) ;
		
		${baseName}${attr.type} * p${attr.name} = (*pList${attr.name})[i] ;
		hr = Write${attr.name}(spElement, p${attr.name}) ;
		if( FAILED(hr) ) 
		{ 
			continue;                
		}
		
	 }
	 
	</#switch>
</#if>
</#list>
 
 return hr ; 
}
